#include "debug.h"
#include "../DDIC/AllDDIC.h"

/*RM9300 Gamma寄存器位址*/
u8 RM330_Gamma_r[54]= {
    0x00,0x01, 0x02,0x03, 0x04,0x05, 0x06,0x07, 0x08,0x09, 0x0A,0x0B, 0x0C,0x0D, 0x0E,0x0F, 0x10,0x11,
    0x12,0x13, 0x14,0x15, 0x16,0x17, 0x18,0x19, 0x1A,0x1B, 0x1C,0x1D, 0x1E,0x1F, 0x20,0x21, 0x22,0x23,
	  0x24,0x25, 0x26,0x27, 0x28,0x29, 0x2A,0x2B, 0x2D,0x2F, 0x30,0x31, 0x32,0x33, 0x34,0x35, 0x36,0x37, 
};
u8 RM330_Gamma_g[54]= {   
	  0x38,0x39, 0x3A,0x3B, 0x3D,0x3F, 0x40,0x41, 0x42,0x43, 0x44,0x45, 0x46,0x47, 0x48,0x49, 0x4A,0x4B,
    0x4C,0x4D, 0x4E,0x4F, 0x50,0x51, 0x52,0x53, 0x54,0x55, 0x56,0x58, 0x59,0x5A, 0x5B,0x5C, 0x5D,0x5E,
    0x5F,0x60, 0x61,0x62, 0x63,0x64, 0x65,0x66, 0x67,0x68, 0x69,0x6A, 0x6B,0x6C, 0x6D,0x6E, 0x6F,0x70,		
};
u8 RM330_Gamma_b[54]={
	  0x71,0x72, 0x73,0x74, 0x75,0x76, 0x77,0x78, 0x79,0x7A, 0x7B,0x7C, 0x7D,0x7E, 0x7F,0x80, 0x81,0x82,
	  0x83,0x84, 0x85,0x86, 0x87,0x88, 0x89,0x8A, 0x8B,0x8C, 0x8D,0x8E, 0x8F,0x90, 0x91,0x92, 0x93,0x94,
	  0x95,0x96, 0x97,0x98, 0x99,0x9A, 0x9B,0x9C, 0x9D,0x9E, 0x9F,0xA0, 0xA2,0xA3, 0xA4,0xA5, 0xA6,0xA7,
};

u8 RM330_Gamma_r1[54]= {
    0x00,0x01, 0x02,0x03, 0x04,0x05, 0x06,0x07, 0x08,0x09, 0x0A,0x0B, 0x0C,0x0D, 0x0E,0x0F, 0x10,0x11,
    0x12,0x13, 0x14,0x15, 0x16,0x17, 0x18,0x19, 0x1A,0x1B, 0x1C,0x1D, 0x1E,0x1F, 0x20,0x21, 0x22,0x23,
	  0x24,0x25, 0x26,0x27, 0x28,0x29, 0x2A,0x2B, 0x2D,0x2F, 0x30,0x31, 0x32,0x33, 0x34,0x35, 0x36,0x37, 
};
u8 RM330_Gamma_g1[54]= {   
	  0x38,0x39, 0x3A,0x3B, 0x3D,0x3F, 0x40,0x41, 0x42,0x43, 0x44,0x45, 0x46,0x47, 0x48,0x49, 0x4A,0x4B,
    0x4C,0x4D, 0x4E,0x4F, 0x50,0x51, 0x52,0x53, 0x54,0x55, 0x56,0x58, 0x59,0x5A, 0x5B,0x5C, 0x5D,0x5E,
    0x5F,0x60, 0x61,0x62, 0x63,0x64, 0x65,0x66, 0x67,0x68, 0x69,0x6A, 0x6B,0x6C, 0x6D,0x6E, 0x6F,0x70,		
};
u8 RM330_Gamma_b1[54]={
	  0x71,0x72, 0x73,0x74, 0x75,0x76, 0x77,0x78, 0x79,0x7A, 0x7B,0x7C, 0x7D,0x7E, 0x7F,0x80, 0x81,0x82,
	  0x83,0x84, 0x85,0x86, 0x87,0x88, 0x89,0x8A, 0x8B,0x8C, 0x8D,0x8E, 0x8F,0x90, 0x91,0x92, 0x93,0x94,
	  0x95,0x96, 0x97,0x98, 0x99,0x9A, 0x9B,0x9C, 0x9D,0x9E, 0x9F,0xA0, 0xA2,0xA3, 0xA4,0xA5, 0xA6,0xA7,
};

u8 RM330_otptime=0;
//u8 RM35x_otptime=0;

void RM69330_Write_Register(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_Read_Register(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_Write_Gamma(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_Read_Gamma(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_Gamma_OTP_Start(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data,u8 RM330_otptime);
void RM69330_Read_OTP_Time(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_Gamma_switch(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_auto_Gamma(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);
void RM69330_Write_51Register(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data);

//----------------------------------------------RM69330----------------------------------------------

void RM69330_Write_Register(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
		//if(USB_Rx_Buffer[1]&0x80)
			SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
		//else
			//SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data);
    SSD2828_W_Array(SigMode,channel,buffer,2);                               

    delay_ms(5);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    buffer[4] = Uart_Error_None;
    buffer[5] = 0;
    STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写寄存器状态  ：ok  
}

void RM69330_Read_Register(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    u8 buffer1[2];
		SSD2828_W_Reg(SigMode,channel,0xB7,((HS_B7_Data|0x0010)&0XFFFD)|0x0080);  //bit7 1:读操作 bit4 1：HS CLOCK Disable
    delay_ms(5);
    SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);                                
    buffer1[0] = 0x01;
    buffer1[1] = buffer[3];
    SSD2828_W_Array(SigMode,channel,buffer1,0); 
    delay_ms(20);
    buffer[4]=SSD2828_R_Reg(SigMode,channel,0xFF);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    delay_ms(5);
    STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 读取的 寄存器数据  ：ok  
}

void RM69330_Write_Gamma(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    u8 buffer1[5];
    //SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFfd);
	  SSD2828_W_Reg(SigMode,channel,0xB7,(LP_B7_Data|0x0010)&0XFFfd);
		delay_ms(5);

    if((buffer[3]&0x03) == 0x00)
    {
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
        buffer1[2] = 0x02;                // GAMMA1  page1
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }
	
    else if((buffer[3]&0x03) == 0x01)
    {  
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
        buffer1[2] = 0x03;                // GAMMA2  page7
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }   
    else if((buffer[3]&0x03) == 0x02)
    {
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
        buffer1[2] = 0x0D;                // GAMMA3  page8
        SSD2828_W_Array(SigMode,channel,buffer1,0);
    }
		else
		{
				buffer[4] = Uart_Error_Oth;
				STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写Gamma状态  ：ok  				
	//			goto RM69330_w_end;//？？？？
		}
		
	

    for( i = 0;i<buffer[2]-1;i++) 
    {	 
			if(buffer[2]==55){
		  	 if     ((buffer[3]&0xf0)==0x00) SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM330_Gamma_r[i]);  
         else if((buffer[3]&0xf0)==0x40) SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM330_Gamma_g[i]); 
         else if((buffer[3]&0xf0)==0x80) SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM330_Gamma_b[i]); 
			}
			else if(buffer[2]==27){
				 if     ((buffer[3]&0xf0)==0x00) SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM330_Gamma_r1[i]);  
         else if((buffer[3]&0xf0)==0x40) SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM330_Gamma_g1[i]); 
         else if((buffer[3]&0xf0)==0x80) SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|RM330_Gamma_b1[i]); 
			}    																		
      delay_ms(3);
    }
		
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    buffer[4] = Uart_Error_None;
    STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写Gamma状态  ：ok  
		//RM69330_w_end: ;
}

void RM69330_Read_Gamma(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    u8 buffer1[3];
		SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data);
	   //SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
		delay_ms(15);
		buffer1[0] = 0x02;
        
    if(buffer[4] == 0x00)      //Gamma1 
    {  
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
			  buffer1[2] = 0x02;      
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
    }
    else if(buffer[4] == 0x01) //Gamma2 
    {  
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;       
        buffer1[2] = 0x03;      
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
    }
    else if(buffer[4] == 0x02) //Gamma3 
    {  
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;        
        buffer1[2] = 0x0D;     
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
    }
		else
		{
				buffer[4] = Uart_Error_Oth;
				STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写Gamma状态  ：ok  				
    		goto RM69330_r_end;
		}		
		delay_ms(15);		
    SSD2828_W_Reg(SigMode,channel,0xB7,LP_B7_Data|0x0080); 
    SSD2828_W_Reg(SigMode,channel,0xBC,0x0001);	
    for( i = 0;i<buffer[2]-1;i++)			 	
    {  	
        
        SSD2828_W_Reg(SigMode,channel,0xC1,0x0002);                                
        buffer1[0] = 0x01;
			  if(buffer[2]==55)
				{
			   	buffer1[1] = (buffer[3]==0x00) ? RM330_Gamma_r[i] : ((buffer[3]==0x42) ? RM330_Gamma_g[i] : RM330_Gamma_b[i]);
				}
				else if(buffer[2]==27)
				{
				  buffer1[1] = (buffer[3]==0x00) ? RM330_Gamma_r1[i] : ((buffer[3]==0x42) ? RM330_Gamma_g1[i] : RM330_Gamma_b1[i]);
				}
        
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
				delay_ms(6);
        buffer[4+i]=SSD2828_R_Reg(SigMode,channel,0xFF);        
    }	
    delay_ms(5);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 读取的 Gamma数据  ：ok  
		RM69330_r_end: ;
}




void RM69330_Gamma_OTP_Start(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data,u8 RM330_otptime)
{
//    u16 tmp;
    u8 buffer1[3];  
    SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0xFFFD);   
    delay_ms(5);
    buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x00;
    SSD2828_W_Array(SigMode,channel,buffer1,0);     // UCS用户选择
    delay_ms(5);
    buffer1[0] = 0x02;
    buffer1[1] = 0x28;
	  buffer1[2] = 0x00;
    SSD2828_W_Array(SigMode,channel,buffer1,0);     // 关显示 
    delay_ms(100);  //otp
    buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x01; 
    SSD2828_W_Array(SigMode,channel,buffer1,0);     //Page0
    
	if(buffer[1]==0x0A)  //otp GammaSet1 F0 D[4]:0001-0000
    {
        buffer1[0] = 0x02;
			  buffer1[1] = 0xF0;
        buffer1[2] = 0x10; 
        SSD2828_W_Array(SigMode,channel,buffer1,0);     //OTP_CMD2_P1_PGM_EN          
    }
    if(buffer[1]==0x0D)  //otp GammaSet2 F0 D[3]:0000-1000
    {
        buffer1[0] = 0x02;
			  buffer1[1] = 0xF0;
        buffer1[2] = 0x08; 
        SSD2828_W_Array(SigMode,channel,buffer1,0);     //OTP_CMD2_P6_PGM_EN  
    }
    if(buffer[1]==0x0E) //otp GammaSet3  F6 D[4]:0001-0000
    {		
        buffer1[0] = 0x02;
			  buffer1[1] = 0xF6;
        buffer1[2] = 0x10;        
        SSD2828_W_Array(SigMode,channel,buffer1,0);     //OTP_CMD2_P8_PGM_EN  
    }
    if(buffer[1]==0x0F) // otp goa
    {
        buffer1[0] = 0x02;
			  buffer1[1] = 0xF0;
        buffer1[2] = 0x04; 
        SSD2828_W_Array(SigMode,channel,buffer1,0);     //OTP_CMD2_P2_PGM_EN  
    }
    if(buffer[1]==0x10) // otp All
    {
//      /////// otp power  
//			buffer1[0] = 0x02;
//        buffer1[1] = 0xF0;///0xF6
//        buffer1[2] = 0xA0;////0x08	      
	
			/////// otp All  page 40\70\80\90\10\20
			buffer1[0] = 0x02;
        buffer1[1] = 0xF0;///0xF6
        buffer1[2] = 0xA6;////0x08	    			
        SSD2828_W_Array(SigMode,channel,buffer1,0);     //  
			
			////page  
			buffer1[0] = 0x02;
        buffer1[1] = 0xF6;///0xF6
        buffer1[2] = 0x4C;////0x08	    			
        SSD2828_W_Array(SigMode,channel,buffer1,0);     //  
    }    

    buffer1[0] = 0x02;//MTPCTR
    buffer1[1] = 0xF2;
    buffer1[2] = 0x03;
    SSD2828_W_Array(SigMode,channel,buffer1,0);    
	
    buffer1[0] = 0x02;
    buffer1[1] = 0xF3;
    buffer1[2] = 0xA5;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  

    buffer1[0] = 0x02;
    buffer1[1] = 0xF4;
    buffer1[2] = 0x5A;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  

    buffer1[0] = 0x02;
    buffer1[1] = 0xF5;
    buffer1[2] = 0x3C;
    SSD2828_W_Array(SigMode,channel,buffer1,0);  		
                      
    delay_ms(1500);         // wait for >400 ms   

    buffer[4] = Uart_Error_Oth;
    STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写OTP状态  ：ok
}

void RM69330_Read_OTP_Time(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    u8 buffer1[3];
    u16 ED_D,EE_D,EF_D;
    u8 RM330_otptime = 0;
    if(SigMode != CMD_Mode)  SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
	
    delay_ms(5);
    buffer1[0] = 0x02;
    buffer1[1] = 0xFE;
    buffer1[2] = 0x01;  // Page 0 extern     
	  SSD2828_W_Array(SigMode,channel,buffer1,0);
    //delay_ms(20);
	
    SSD2828_W_Reg(SigMode,channel,0xB7,((HS_B7_Data|0x0010)&0XFFFD)|0x0080);      

    delay_ms(5);
    buffer1[0] = 0x01;
    buffer1[1] = 0xEE;         //与69300有区别
    SSD2828_W_Array(SigMode,channel,buffer1,0);
    delay_ms(20);
	
    if(SigMode == Mipi_Mode)  SSD2828_W_Reg(SigMode,channel,0xD4,0x00FA);	 //RGB+SPI= MIPI  
        						
    delay_ms(5);                                  
    EE_D=SSD2828_R_Reg(SigMode,channel,0xFF); 
    
    
    buffer1[0] = 0x01;
    buffer1[1] = 0xED;
    SSD2828_W_Array(SigMode,channel,buffer1,0);
    delay_ms(20);
    if(SigMode == Mipi_Mode) SSD2828_W_Reg(SigMode,channel,0xD4,0x00FA); //RGB+SPI= MIPI  
        							
    delay_ms(5);                             
    ED_D=SSD2828_R_Reg(SigMode,channel,0xFF); 
		
		buffer1[0] = 0x01;
    buffer1[1] = 0xEF;
    SSD2828_W_Array(SigMode,channel,buffer1,0);
    delay_ms(20);
    if(SigMode == Mipi_Mode) SSD2828_W_Reg(SigMode,channel,0xD4,0x00FA); //RGB+SPI= MIPI  
        							
    delay_ms(5);                             
    EF_D=SSD2828_R_Reg(SigMode,channel,0xFF); 
         
    if(buffer[3] == 0x00)       //读取gamma1次数
    {
        if(EE_D&0X10)  RM330_otptime = 1;
        if(EE_D&0X08)  RM330_otptime = 2;
    }
    else if(buffer[3] == 0x01)  //读取gamma2次数
    {
        if(EE_D&0X04)  RM330_otptime = 1; 
        if(EE_D&0X02)  RM330_otptime = 2;        
    }
    else if(buffer[3] == 0x02)  //读取gamma3次数
    {
        if(EF_D&0X04)  RM330_otptime = 1;      
    }
    else if(buffer[3] == 0x03)  //读取GOA次数
    {
        if(EE_D&0X01)  RM330_otptime = 1;
        if(EF_D&0X80)  RM330_otptime = 2;   
        
    }
    else if(buffer[3] == 0x04)  //读取POWER次数
    {
        if(ED_D&0X40)  RM330_otptime = 1;
        if(ED_D&0X80)  RM330_otptime = 2;     
    }                                
    buffer[4]=RM330_otptime;
    RM330_otptime=0x00;
    delay_ms(5);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
    buffer[3] = Uart_Error_None;
    STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 读取的OTP数据  ：ok  
}

void RM69330_Gamma_switch(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
u8 buffer1[5];
    static u8 RM69330_state = 0;    // 0=normal   1=idle  2=HBM
    SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
    delay_ms(10);
    if(buffer[3] == 0x01) //GAMMA1
    {
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
        buffer1[2] = 0x02;
        SSD2828_W_Array(SigMode,channel,buffer1,0); 
			
				if(buffer[4] == 0x01) {
						buffer1[0] = 0x02;
					  buffer1[1] = 0xAB; // AB:01 27 Points, AB:81 13 Points
						buffer1[2] = 0x01;  
						SSD2828_W_Array(SigMode,channel,buffer1,0);
				}
				else if(buffer[4] == 0x02) 	{
				
						buffer1[0] = 0x02;
						buffer1[1] = 0xAB;
						buffer1[2] = 0x81;  // AB:01 27 Points, AB:81 13 Points
						SSD2828_W_Array(SigMode,channel,buffer1,0);
				}
        
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
				buffer1[2] = 0x02;   //MCS Page1 Gamma set-1
        SSD2828_W_Array(SigMode,channel,buffer1,0);
        RM69330_state = 0;
    }
    else if(buffer[3] == 0x02) //GAMMA2
    {
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
        buffer1[2] = 0x03;
        SSD2828_W_Array(SigMode,channel,buffer1,0);
        if(buffer[4] == 0x01) {
						buffer1[0] = 0x02;
					  buffer1[1] = 0xAB; // AB:00 27 Points, AB:80 13 Points
						buffer1[2] = 0x00;  
						SSD2828_W_Array(SigMode,channel,buffer1,0);
				}
				else if(buffer[4] == 0x02) 	{
				
						buffer1[0] = 0x02;
						buffer1[1] = 0xAB;
						buffer1[2] = 0x80;  // AB:00 27 Points, AB:80 13 Points
						SSD2828_W_Array(SigMode,channel,buffer1,0);
				}     
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
				buffer1[2] = 0x03;                             //MCS Page7 Gamma set-2
        SSD2828_W_Array(SigMode,channel,buffer1,0);
        RM69330_state = 1;
       
    }   
    else if(buffer[3] == 0x03) //GAMMA3 Just only 13 Points,so no changing
    {
        buffer1[0] = 0x02;
        buffer1[1] = 0xFE;
        buffer1[2] = 0x0D;
        SSD2828_W_Array(SigMode,channel,buffer1,0);
       
        RM69330_state = 2;
    }
 
   
//		delay_ms(50);
//		buffer1[0] = 0x02;
//		buffer1[1] = 0xF0;
//		buffer1[2] = 0x01;    
//		SSD2828_W_Array(SigMode,channel,buffer1,0);   //更新Gamma从RAM到寄存器
//		buffer1[0] = 0x02;
//		buffer1[1] = 0xEF;
//		buffer1[2] = 0x00;    
//		SSD2828_W_Array(SigMode,channel,buffer1,0);   //禁止存取Gamma  
//		delay_ms(5);
		SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
		buffer[4] = Uart_Error_None;
		STM2PC_RM671xx(pdev,CDC_IN_EP,buffer,buffer[2]+3);           //返回 写Gamma状态  ：ok  
}

void RM69330_auto_Gamma(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
	u8 buffer1[3];
	if(SigMode != CMD_Mode)
        SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);

	
		buffer1[0] = 0x02;
		buffer1[1] = 0xFE;
		buffer1[2] = 0x02;              // GAMMA1  page1
		SSD2828_W_Array(SigMode,channel,buffer1,0);	
		SSD2828_W_Reg(SigMode,channel,0xBC,0x02);
	
    for( i = 0;i<buffer[2];i++) 
    {	 
            SSD2828_W_Reg(SigMode,channel,0xBF,(u16)(buffer[i+4]<<8)|buffer[i+3]);  

            i++;
            delay_ms(2);
    }				
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
}

void RM69330_Write_51Register(USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8* buffer,u16 LP_B7_Data,u16 HS_B7_Data)
{
    SSD2828_W_Reg(SigMode,channel,0xB7,(HS_B7_Data|0x0010)&0XFFFD);
    SSD2828_W_Array(SigMode,channel,buffer,2);
    SSD2828_W_Reg(SigMode,channel,0xB7,HS_B7_Data);
}
void ProcessForIc32( USB_OTG_CORE_HANDLE *pdev,uint8_t  ep_addr,u8 SigMode ,u8 channel,u8 buffer[],u16 LP_B7_Data,u16 HS_B7_Data)//ADD BY PCS
{
switch(buffer[1]&0xFF)
		{
				case 0x01:                                      //写寄存器
            RM69330_Write_Register(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
        break;
        case 0x02:                                      //读寄存器
            RM69330_Read_Register(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
        break;
        case 0x08:                                      //写Gamma
        RM69330_Write_Gamma(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
        break;
        case 0x09:                                      //读Gamma
        RM69330_Read_Gamma(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data); 
        break;
        case 0x0A:  //otp GammaSet1   
				case 0x0D:  //otp GammaSet2    															
        case 0x0E:  //otp GammaSet3 
        case 0x0F:  //otp goa 
        case 0x10:  //otp power 
				case 0x07:
        //RM69330_Gamma_OTP_Start(pdev,ep_addr,SigMode ,channel,buffer, LP_B7_Data,HS_B7_Data,RM35x_otptime); 
        RM69330_Gamma_OTP_Start(pdev,ep_addr,SigMode ,channel,buffer, LP_B7_Data,HS_B7_Data,RM330_otptime);//原来的
				break;
        case 0x0B:                                      //Read OTP Time
        RM69330_Read_OTP_Time(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data); 
        break;
        case 0x0C://otp time
        RM330_otptime=buffer[4];
				//RM35x_otptime=buffer[4];//原来的
        buffer[4] = Uart_Error_None;
        STM2PC_RM671xx(pdev,CDC_IN_EP,USB_Rx_Buffer,USB_Rx_Buffer[2]+3);           //返回 写otp time
        break;
				case 0xDD:           // auto Gamma
        RM69330_auto_Gamma(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
        break;
        case 0x11:    // RM330 only 1 set gamma
        RM69330_Gamma_switch(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
        break;
        case 0x51:                                      //写寄存器
        RM69330_Write_51Register(pdev,ep_addr,SigMode,channel,buffer,LP_B7_Data,HS_B7_Data);
        break;
				default:break;
	}	
	
}





 


